package UIlayer;
import CtrlLayer.*;

import java.util.Scanner;

/**
 * Write a description of class KundeUI here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class KundeUI
{
    // instance variables - replace the example below with your own
    private KundeCtrl kundeCtrl;
    private static KundeUI instance;
    private Scanner input;

    /**
     * Constructor for objects of class KundeUI
     */
    private KundeUI()
    {
        kundeCtrl = new KundeCtrl();
        input = new Scanner(System.in);
    }

    /**
     * Danner en ny instans af KundeUI, hvis en ikke eksistere, og retunere instansen
     * 
     * @return Den instans af KundeUI, der burde være den eneste
     */
    public static KundeUI getInstance()
    {
        if(instance == null)
        {
            instance = new KundeUI();
        }
        return instance;
    }
    
    /**
     * Menuen hvorfra man interagere med kunde klasserne
     */
    public void kundeMenu()
    {
        boolean exit = false;
        int i = 0;
        while(!exit)
        {
            System.out.println("\n\n1. Tilføj kunde \n2. Delete kunde \n3. find kunde\n");
            switch(getInt()){
                case -1:
                if(i > 10)
                {
                    fuckoff();
                    exit = true;
                    break;
                }
                System.out.println("enter whole number please ");
                i++;
                break;
                case 1:
                System.out.println("Tilføj kunde:");
                addKunde();
                break;
                case 2:
                System.out.println("Indtast kunde id");
                removeKunde(getInt());
                break;
                case 3:
                System.out.println("Indtast kunde id");
                System.out.println(findKunde(getInt()));
                break;
                default:
                System.out.println("bad choice");
                exit = true;
                break;
            }
        }
    }

    /**
     * Retunere næste indtastede int, eller -1 hvis det ikke er en int
     */
    private int getInt()
    {
        int choice = -1;
        if(input.hasNextInt())
        {
            choice = input.nextInt();
        }
        @SuppressWarnings("unused")
		String whatever = input.nextLine();
        return choice;
    }

    /**
     * Retunere næste indtastede double, eller -1 hvis det ikke er en double
     */
    private double getDouble()
    {
        double choice = -1;
        if(input.hasNextDouble())
        {
            choice = input.nextDouble();
        }
        @SuppressWarnings("unused")
		String whatever = input.nextLine();
        return choice;
    }

    /**
     * Retunere sandt hvis y indtastes, og falsk hvis ikke
     */
    private boolean yes()
    {
        boolean yes = false;
        if(input.next().toLowerCase().startsWith("y"))
        {
            yes = true;
        }
        return yes;
    }

    /**
     * En fin metode til de narhatte der er træls
     */
    private void fuckoff()
    {
        System.out.println("now look at what you did...");
        try
        {
            Thread.sleep(500);
        }
        catch(InterruptedException e){}
        for(int i = 0; i < 100; i++)
        {
            System.out.println("just enter a fucking NUMBER!");
            try
            {
                Thread.sleep(100);
            }
            catch(InterruptedException e){}
        }
    }
	
    /**
     * Retunere næste streng indtstet
     */
	private String getNavn()
	{
	    String navn;
		System.out.println("indtast navn");
		navn = input.nextLine();
		return navn;
	}
	
    /**
     * Retunere næste streng indtstet
     */
	private String getAddress()
	{
	    String address;
		System.out.println("indtast addresse");
		address = input.nextLine();
		return address;
	}
	
    /**
     * Retunere næste streng indtstet der er 8 karaktere langt
     */
	private String getTlf()
	{
	    String tlf;
		System.out.println("indtast tlf");
		tlf = input.nextLine();
		while(tlf.length() != 8)
		{
			System.out.println("ikke gyldigt nummer");
			tlf = input.nextLine();
		}
		return tlf;
	}
	
	/**
	 * Tetunere den double indtastet mellem 0 og 20
	 */
	private double getRabat()
	{
	    double rabat;
		System.out.println("indtast rabat");
		rabat = getDouble();
		while(rabat > 20 || rabat < 0)
		{
			if(rabat > 20)
			{
				System.out.println("kan maks må 20% rabat");
			}
			if(rabat < 0)
			{
				System.out.println("hvad har du mod den person? prøv igen");
			}
			rabat = getDouble();
		}
		return rabat;
	}

	/**
	 * Tilføjer en kunde til registeret, informationen samles fra input
	 */
    public void addKunde()
    {
        String navn; String address; String tlf; double rabat;
		navn = getNavn();
		address = getAddress();
		tlf = getTlf();
		rabat = getRabat();
        kundeCtrl.addKunde(navn,address,tlf,rabat);
    }

    /**
     * Finder og ændre værdier ved en kunde, samler information fra input
     */
    public void setKunde()
    {
        int id; String navn; String address; String tlf; double rabat;
		System.out.println("indtast id på kunden der skal ændres");
		id = getInt();
		if(findKunde(id) != null)
		{
			System.out.println(findKunde(id));
			System.out.println("this the guy? Y/N");
			if(yes())
			{
				navn = getNavn();
				address = getAddress();
				tlf = getTlf();
				rabat = getRabat();
				kundeCtrl.setKunde(id, navn,address,tlf,rabat);
			}
			else
			{
				System.out.println("fandt ikke kunden: prøv igen? Y/N");
				if(yes())
				{
					setKunde();
				}
			}
		}
		else
		{
			System.out.println("fandt ikke kunden: prøv igen? Y/N");
			if(yes())
			{
				setKunde();
			}
		}
    }

    /**
     * Fjerner kunden med angivne id
     * 
     * @return Sandt ved succes
     */
    public boolean removeKunde(int id)
    {
        boolean successful = true;
        if(findKunde(id) == null)
        {
            successful = false;
        }
        else
        {
            kundeCtrl.removeKunde(id);
        }
        return successful;
    }

    /**
     * Retunere informationer om kunde med angivne id
     * 
     * @return Streng med info om kunden
     */
    public String findKunde(int id)
    {
        String kunde = null;
        if(id != 0)
        {
            try
            {
                kunde = kundeCtrl.findKunde(id).getNavn();
            }
            catch(NullPointerException e)
            {
                System.out.println("Fandt ikke kunden, prøv igen");
                findKunde(getInt());
            }
        }
        return kunde;
    }

}